import { Auth } from '../../lib/auth/index'
import MyStore from '../store/index'
/**
 * 权限验证
 * @description
 * 权限分为三种：
 * 一：路由方面，用户登录后只能看到自己有权访问的导航，也只能访问自己有权访问的路由地址，否则将跳转 4xx 提示页；
 * // 设置页面跳转方法的拦截器，页面跳转方法哪里直接配置
 * 二：视图方面，用户只能看到自己有权浏览的内容和有权操作的控件【按钮等】；
 * // 自定义指令用于试图元素的权限验证
 *    Vue.directive('has', {
 *      bind: (el, binding) => {
 *        if (!Vue.prototype.$_has(binding.value)) {
 *          el.parentNode.removeChild(el)
 *        }
 *      }
 *    })
 * 三：最后再加上请求控制作为最后一道防线，路由可能配置失误，按钮可能忘了加权限，这种时候请求控制可以用来兜底，越权请求将在前端被拦截。
 * // 这个在请求的拦截器哪里直接配置
 */
class MyAuth extends Auth {
  constructor() {
    super()
    this.instance = null
  }

  static getInstance() {
    if (!this.instance) {
      this.instance = new MyAuth()
    }
    return this.instance
  }

  /**
   * 检查某个权限是否存在
   * @param {*} pid
   */
  checkPermission(pid) {
    let userinfo = MyStore.state.userinfo
    if (userinfo && userinfo.uid) {
      let permission = this.getPermission(userinfo.uid)
      if (permission.length > 0) {
        let valid = permission.some(v => {
          return v.pid === pid
        })
        return valid
      }
    }
    return false
  }
}

let _myAuth = MyAuth.getInstance()
export default _myAuth
